package com.pan.test.utils;

import com.alibaba.fastjson.JSONObject;
import org.springframework.util.DigestUtils;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

public class PaymentUtils {
    
    // 支付宝支付配置（这里使用模拟数据，实际项目中应该从配置文件读取）
    private static final String ALIPAY_APP_ID = "2021000000000000";
    private static final String ALIPAY_PRIVATE_KEY = "your_private_key";
    private static final String ALIPAY_PUBLIC_KEY = "alipay_public_key";
    
    // 微信支付配置
    private static final String WECHAT_APP_ID = "wx1234567890";
    private static final String WECHAT_MCH_ID = "1234567890";
    private static final String WECHAT_API_KEY = "your_api_key";
    
    /**
     * 生成支付宝支付链接
     */
    public static String generateAlipayUrl(String orderId, BigDecimal amount, String subject) {
        // 实际项目中，这里应该调用支付宝SDK生成支付链接
        // 这里使用模拟链接
        Map<String, Object> params = new HashMap<>();
        params.put("app_id", ALIPAY_APP_ID);
        params.put("out_trade_no", orderId);
        params.put("total_amount", amount);
        params.put("subject", subject);
        
        // 生成签名
        String sign = generateSign(params);
        
        return "https://openapi.alipay.com/gateway.do?" +
                "app_id=" + ALIPAY_APP_ID +
                "&out_trade_no=" + orderId +
                "&total_amount=" + amount +
                "&subject=" + subject +
                "&sign=" + sign;
    }
    
    /**
     * 生成微信支付二维码内容
     */
    public static String generateWechatQrCode(String orderId, BigDecimal amount, String subject) {
        // 实际项目中，这里应该调用微信支付SDK生成支付二维码
        // 这里使用模拟数据
        Map<String, Object> params = new HashMap<>();
        params.put("appid", WECHAT_APP_ID);
        params.put("mch_id", WECHAT_MCH_ID);
        params.put("out_trade_no", orderId);
        params.put("total_fee", amount.multiply(new BigDecimal("100")).intValue());
        params.put("body", subject);
        
        // 生成签名
        String sign = generateSign(params);
        
        // 返回二维码内容（实际项目中应该是真实的二维码数据）
        return "weixin://wxpay/bizpayurl?appid=" + WECHAT_APP_ID +
                "&mch_id=" + WECHAT_MCH_ID +
                "&out_trade_no=" + orderId +
                "&total_fee=" + amount.multiply(new BigDecimal("100")).intValue() +
                "&sign=" + sign;
    }
    
    /**
     * 验证支付宝回调签名
     */
    public static boolean verifyAlipayCallback(Map<String, String> params, String sign) {
        // 实际项目中，这里应该使用支付宝SDK验证签名
        return true;
    }
    
    /**
     * 验证微信支付回调签名
     */
    public static boolean verifyWechatCallback(Map<String, String> params, String sign) {
        // 实际项目中，这里应该使用微信支付SDK验证签名
        return true;
    }
    
    /**
     * 生成签名
     */
    private static String generateSign(Map<String, Object> params) {
        // 实际项目中，这里应该根据支付平台的签名规则生成签名
        String jsonStr = JSONObject.toJSONString(params);
        return DigestUtils.md5DigestAsHex(jsonStr.getBytes());
    }
} 